#ifndef _Ape__Cloneable
#define _Ape__Cloneable

namespace Ape {
	/*
	class ICloneable { // Stub - to have common point
	};
	
	template<class Class_t>
	class Cloneable {
	public:
	//     	Cloneable() {}
	//     	Cloneable(const Cloneable&) {}
	//     	virtual ~Cloneable() {}
		Class_t* clone() {
			return cloneAtHeap();
		}
		Class_t* cloneAtHeap() {
			return new Class_t(*reinterpret_cast<Class_t*>(this));
		}
	};
	*/
	
#define CLONEABLE(Class_t) \
public: \
	virtual Class_t* Clone() { return new Class_t(*this); } \
private:
}

#endif // _Ape__Cloneable
